/*
 * @Author: 颜礼田 2564217790@qq.com
 * @Date: 2024-09-06 18:22:28
 * @LastEditors: 颜礼田 2564217790@qq.com
 * @LastEditTime: 2024-09-07 10:35:20
 * @FilePath: /webServer/src/middleware/report.middleware.ts
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import { Middleware, IMiddleware } from '@midwayjs/core';
import { NextFunction, Context } from '@midwayjs/koa';

@Middleware()
export class ReportMiddleware implements IMiddleware<Context, NextFunction> {
  resolve() {
    return async (ctx: Context, next: NextFunction) => {
      // 控制器前执行的逻辑
      const startTime = Date.now();
      // 执行下一个 Web 中间件，最后执行到控制器
      // 这里可以拿到下一个中间件或者控制器的返回值
      const result = await next();
      // 控制器之后执行的逻辑

      ctx.logger.info(`\n\t[Path]: ${
        ctx.path
      }\n\t[Params]:\n\t\t[Query]: ${JSON.stringify(
        ctx.request.query
      )}\n\t\t[Body]:${JSON.stringify(
        ctx.request.body
      )}\n\t[Response]:\n\t\t[Body]:${JSON.stringify(ctx.body)}\n\t[Method]:${
        ctx.method
      }\n\t[RT]: ${Date.now() - startTime}ms
        `);
      // 返回给上一个中间件的结果
      return result;
    };
  }

  static getName(): string {
    return 'report';
  }
}
